Increasing demand for cache resources in Solid State Disk (SSD) or flash devices has created a need for efficient use of available cache resources. SSD utilization has increased relative to use of traditional hard drive based on greater SSD speed and reduced SSD size relative to the traditional drives. Some storage solutions may include both a less expensive but more capacious hard drive employed with a smaller but nimble SSD to enhance storage productivity for the overall system. Use of the SSD as cache for the hard drive may further enhance capabilities of the overall system.
In virtualized environments (VE), as each device of a networked system may contain unused resources, a hypervisor may employ a number of operating systems to act in concert to distribute the unused resources of each individual operating system across the whole of the system for efficient use.
Server operations may employ a plurality of virtual machines (VM) operating within a VE. Each VM may have a specific task as desired by the host where the number, objectives, and cache requirements of the VM may routinely change, and dynamically increase or decrease during operation.
In this dynamic environment, one challenge may include how to provide the maximum capabilities to fully perform a system of a variable number of VM with a finite amount of cache available. This greatly variable number of VM may be reliant on the finite amount of available cache for desired performance. The cache hierarchy may include some hard drive (HDD) capacity, some SSD capacity, and method of software caching appropriate for the operating system. Hard drive partitioning may be well-known in the art since physical hard drives have been long established as a functional, albeit cumbersome, storage medium.
Cache is considered a critical resource in SSD based VM operation. Operations performed on the SSD (and performed external to the HDD) may be performed at a fraction of the time as required when performed on the HDD. As a general rule, the higher percentage of code available to the SSD, the faster the operation is performed. Thus, having a maximum amount of SSD cache available to VM may greatly increase the speed with which the VM may perform.
The problem continues unresolved of how to properly and efficiently allocate SSD capacity and to efficiently partition the SSD to give a portion of cache to a dynamic number of VM requesting an allocation.
One solution may include statically portioning a fixed quota of cache to each VM regardless of operational requests. This simple solution has proven greatly inefficient as unused cache may remain idle for extended periods while the associated VM is idle. Also one VM may require more cache than a second VM. While this solution may provide for cache allocation statically assigned at VM creation, it is unable to adapt to VM workload that may change over time.
Another attempt at a solution may include a configuration assuming a static number of VM is known prior to VM cache allocation. This option may fail as well since in many systems, VM may be created and destroyed at will leaving a static amount of cache idle after VM destruction.
Another attempt at a solution may include a plan for the maximum number of VM possible to be supported and allocate that number of cache pools for the associated VM. This solution would also be very inefficient as a number of cache allocations would be created during times when only a small percentage of VM may be present and active, thus wasting valuable cache content for the other allocations. This maximum number solution may further assume the maximum number of VM may be available at startup. Thus, failure of this method is assured since an accurate assumption such as this is rare.
An example of a static allocation may present itself in a virtual desktop infrastructure (VDI) environment. There may be, for example, 10 servers servicing 1,000 VM, an average of 100 VM per server. It may be unknown however, which VM is running on which server or how many VM may be running at each time of day (there may be only 150 at night but all 1,000 during day peak hours). Sizing an allocation of 100 GB of cache for a worst case scenario (when all 1,000 VM may be in operation) would result in a cache allocation of 100 MB per VM. During off peak operation (at night when 850 of the VM may be idle) would leave 85 GB of cache in an idle state when there may be an alternative method to maintain its use. Leaving 850 GB unused would be extremely ineffective and unusable.
Static allocation of cache resources may present post allocation problems as well. For example, in a traditional system, two VM may operate with each VM using 50% of the available cache. At some point in time one of the VM may be very active and need more than its assigned cache allotment and, at the same time, the other VM may be rather idle and need much less of assigned 50% allotment. It could be advantageous for both VM if the first VM could be reallocated more cache during this time than the original 50%. In a traditional statically assigned environment, this reallocation would not be available.
Thus, there remains a need for a system and method for dynamic management of cache assignments to a dynamic number of VM each requesting a variable amount of cache at different times.